// This example shows how subscribe to changes of multiple items and display the value of the item with each change. using System; using System.Threading; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.DataAccess.OperationModel; namespace DocExamples.DataAccess._EasyDAClient { partial class SubscribeMultipleItems { public static void Main1() { // Instantiate the client object. using (var client = new EasyDAClient()) { client.ItemChanged += client_Main1_ItemChanged; Console.WriteLine("Subscribing item changes..."); client.SubscribeMultipleItems( new[] { new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Random", 1000, null), new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Trends.Ramp (1 min)", 1000, null), new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Trends.Sine (1 min)", 1000, null), new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 1000, null) }); Console.WriteLine("Processing item changed events for 1 minute..."); Thread.Sleep(60 * 1000); Console.WriteLine("Unsubscribing item changes..."); } Console.WriteLine("Finished."); } // Item changed event handler static void client_Main1_ItemChanged(object sender, EasyDAItemChangedEventArgs e) { if (e.Succeeded) Console.WriteLine($"{e.Arguments.ItemDescriptor.ItemId}: {e.Vtq}"); else Console.WriteLine($"{e.Arguments.ItemDescriptor.ItemId} *** Failure: {e.ErrorMessageBrief}"); } } }
# This example shows how subscribe to changes of multiple items and display the value of the item with each change. #requires -Version 5.1 using namespace OpcLabs.EasyOpc.DataAccess using namespace OpcLabs.EasyOpc.DataAccess.OperationModel # The path below assumes that the current directory is [ProductDir]/Examples-NET/PowerShell/Windows . Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassicCore.dll" Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassic.dll" Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassicComponents.dll" # Instantiate the client object. $client = New-Object EasyDAClient # Item changed event handler Register-ObjectEvent -InputObject $client -EventName ItemChanged -Action { if ($EventArgs.Succeeded) { Write-Host "$($EventArgs.Arguments.ItemDescriptor.ItemId): $($EventArgs.Vtq)" } else { Write-Host "$($EventArgs.Arguments.ItemDescriptor.ItemId) *** Failure: $($EventArgs.ErrorMessageBrief)" } } Write-Host "Subscribing item changes..." $handleArray = [IEasyDAClientExtension]::SubscribeMultipleItems($client, @( (New-Object DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Random", 1000, $null)), (New-Object DAItemGroupArguments("", "OPCLabs.KitServer.2", "Trends.Ramp (1 min)", 1000, $null)), (New-Object DAItemGroupArguments("", "OPCLabs.KitServer.2", "Trends.Sine (1 min)", 1000, $null)), (New-Object DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 1000, $null)) )) Write-Host "Processing item changed events for 1 minute..." $stopwatch = [System.Diagnostics.Stopwatch]::StartNew() while ($stopwatch.Elapsed.TotalSeconds -lt 30) { Start-Sleep -Seconds 1 } Write-Host "Unsubscribing item changes..." $client.UnsubscribeAllItems() Write-Host "Finished."
# This example shows how subscribe to changes of multiple items and display the value of the item with each change. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import time # Import .NET namespaces. from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.DataAccess.OperationModel import * # Item changed event handler. def itemChanged(sender, e): if e.Succeeded: print(e.Arguments.ItemDescriptor.ItemId, ': ', e.Vtq, sep='') else: print(e.Arguments.ItemDescriptor.ItemId, ' *** Failure: ', e.ErrorMessageBrief, sep='') # Instantiate the client object. client = EasyDAClient() client.ItemChanged += itemChanged print('Subscribing item changes...') client.SubscribeMultipleItems([ EasyDAItemSubscriptionArguments('', 'OPCLabs.KitServer.2', 'Simulation.Random', 1000, None), EasyDAItemSubscriptionArguments('', 'OPCLabs.KitServer.2', 'Trends.Ramp (1 min)', 1000, None), EasyDAItemSubscriptionArguments('', 'OPCLabs.KitServer.2', 'Trends.Sine (1 min)', 1000, None), EasyDAItemSubscriptionArguments('', 'OPCLabs.KitServer.2', 'Simulation.Register_I4', 1000, None), ]) print('Processing item change notifications for 1 minute...') time.sleep(60) print('Unsubscribing all items...') client.UnsubscribeAllItems() client.ItemChanged -= itemChanged print('Finished.')
' This example shows how subscribe to changes of multiple items and display the value of the item with each change. Imports System.Threading Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.DataAccess.OperationModel Namespace DataAccess._EasyDAClient Partial Friend Class SubscribeMultipleItems Public Shared Sub Main1() Using client = New EasyDAClient() AddHandler client.ItemChanged, AddressOf client_ItemChanged_Main1 client.SubscribeMultipleItems(New DAItemGroupArguments() { _ New DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Random", 1000, Nothing), _ New DAItemGroupArguments("", "OPCLabs.KitServer.2", "Trends.Ramp (1 min)", 1000, Nothing), _ New DAItemGroupArguments("", "OPCLabs.KitServer.2", "Trends.Sine (1 min)", 1000, Nothing), _ New DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 1000, Nothing) _ }) Console.WriteLine("Processing item changed events for 1 minute...") Thread.Sleep(60 * 1000) End Using End Sub ' Item changed event handler Private Shared Sub client_ItemChanged_Main1(ByVal sender As Object, ByVal e As EasyDAItemChangedEventArgs) ' Display the data If e.Succeeded Then Console.WriteLine("{0}: {1}", e.Arguments.ItemDescriptor.ItemId, e.Vtq) Else Console.WriteLine("{0} *** Failure: {1}", e.Arguments.ItemDescriptor.ItemId, e.ErrorMessageBrief) End If End Sub End Class End Namespace
// This example shows how to subscribe to changes of multiple items and display the value of the item with each change. class DEasyDAClientEvents { function ItemChanged($varSender, $varE) { if ($varE->Succeeded) { printf("s: s\n", $varE->Arguments->ItemDescriptor->ItemId, $varE->Vtq->ToString()); } else { printf("*** Failure: %s\n", $varE->ErrorMessageBrief); } } } $ItemSubscriptionArguments1 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments"); $ItemSubscriptionArguments1->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemSubscriptionArguments1->ItemDescriptor->ItemID = "Simulation.Random"; $ItemSubscriptionArguments1->GroupParameters->RequestedUpdateRate = 1000; $ItemSubscriptionArguments2 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments"); $ItemSubscriptionArguments2->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemSubscriptionArguments2->ItemDescriptor->ItemID = "Trends.Ramp (1 min)"; $ItemSubscriptionArguments2->GroupParameters->RequestedUpdateRate = 1000; $ItemSubscriptionArguments3 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments"); $ItemSubscriptionArguments3->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemSubscriptionArguments3->ItemDescriptor->ItemID = "Trends.Sine (1 min)"; $ItemSubscriptionArguments3->GroupParameters->RequestedUpdateRate = 1000; $ItemSubscriptionArguments4 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments"); $ItemSubscriptionArguments4->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemSubscriptionArguments4->ItemDescriptor->ItemID = "Simulation.Register_I4"; $ItemSubscriptionArguments4->GroupParameters->RequestedUpdateRate = 1000; $arguments[0] = $ItemSubscriptionArguments1; $arguments[1] = $ItemSubscriptionArguments2; $arguments[2] = $ItemSubscriptionArguments3; $arguments[3] = $ItemSubscriptionArguments4; $Client = new COM("OpcLabs.EasyOpc.DataAccess.EasyDAClient"); $Events = new DEasyDAClientEvents(); com_event_sink($Client, $Events, "DEasyDAClientEvents"); $Client->SubscribeMultipleItems($arguments); print "Processing item changed events for 1 minute...\n"; $startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 60);
// This example shows how to subscribe to changes of multiple items and display the value of the item with each change. type TSubscribeMultipleItems_ClientEventHandlers = class // Item changed event handler procedure OnItemChanged( ASender: TObject; sender: OleVariant; const eventArgs: _EasyDAItemChangedEventArgs); end; procedure TSubscribeMultipleItems_ClientEventHandlers.OnItemChanged( ASender: TObject; sender: OleVariant; const eventArgs: _EasyDAItemChangedEventArgs); begin if eventArgs.Succeeded then WriteLn(eventArgs.Arguments.ItemDescriptor.ItemId, ': ', eventArgs.Vtq.ToString) else WriteLn(eventArgs.Arguments.ItemDescriptor.ItemId, ' *** Failure: ', eventArgs.ErrorMessageBrief); end; class procedure SubscribeMultipleItems.Main; var Arguments: OleVariant; Client: TEasyDAClient; ClientEventHandlers: TSubscribeMultipleItems_ClientEventHandlers; HandleArray: OleVariant; ItemSubscriptionArguments1: _EasyDAItemSubscriptionArguments; ItemSubscriptionArguments2: _EasyDAItemSubscriptionArguments; ItemSubscriptionArguments3: _EasyDAItemSubscriptionArguments; ItemSubscriptionArguments4: _EasyDAItemSubscriptionArguments; begin ItemSubscriptionArguments1 := CoEasyDAItemSubscriptionArguments.Create; ItemSubscriptionArguments1.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; ItemSubscriptionArguments1.ItemDescriptor.ItemID := 'Simulation.Random'; ItemSubscriptionArguments1.GroupParameters.RequestedUpdateRate := 1000; ItemSubscriptionArguments2 := CoEasyDAItemSubscriptionArguments.Create; ItemSubscriptionArguments2.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; ItemSubscriptionArguments2.ItemDescriptor.ItemID := 'Trends.Ramp (1 min)'; ItemSubscriptionArguments2.GroupParameters.RequestedUpdateRate := 1000; ItemSubscriptionArguments3 := CoEasyDAItemSubscriptionArguments.Create; ItemSubscriptionArguments3.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; ItemSubscriptionArguments3.ItemDescriptor.ItemID := 'Trends.Sine (1 min)'; ItemSubscriptionArguments3.GroupParameters.RequestedUpdateRate := 1000; ItemSubscriptionArguments4 := CoEasyDAItemSubscriptionArguments.Create; ItemSubscriptionArguments4.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; ItemSubscriptionArguments4.ItemDescriptor.ItemID := 'Simulation.Register_I4'; ItemSubscriptionArguments4.GroupParameters.RequestedUpdateRate := 1000; Arguments := VarArrayCreate([0, 3], varVariant); Arguments[0] := ItemSubscriptionArguments1; Arguments[1] := ItemSubscriptionArguments2; Arguments[2] := ItemSubscriptionArguments3; Arguments[3] := ItemSubscriptionArguments4; // Instantiate the client object and hook events Client := TEasyDAClient.Create(nil); ClientEventHandlers := TSubscribeMultipleItems_ClientEventHandlers.Create; Client.OnItemChanged := ClientEventHandlers.OnItemChanged; TVarData(HandleArray).VType := varArray or varVariant; TVarData(HandleArray).VArray := PVarArray( Client.SubscribeMultipleItems(Arguments)); WriteLn('Processing item changed events for 1 minute...'); PumpSleep(60*1000); WriteLn('Unsubscribing...'); Client.UnsubscribeAllItems; WriteLn('Waiting for 5 seconds...'); PumpSleep(5*1000); WriteLn('Finished.'); VarClear(HandleArray); VarClear(Arguments); FreeAndNil(Client); FreeAndNil(ClientEventHandlers); end;
Rem This example shows how to subscribe to changes of multiple items and display the value of the item with each change. ' The client object, with events 'Public WithEvents Client2 As EasyDAClient Private Sub SubscribeMultipleItems_Main_Command_Click() OutputText = "" Dim itemSubscriptionArguments1 As New EasyDAItemSubscriptionArguments itemSubscriptionArguments1.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" itemSubscriptionArguments1.ItemDescriptor.itemId = "Simulation.Random" itemSubscriptionArguments1.GroupParameters.requestedUpdateRate = 1000 Dim itemSubscriptionArguments2 As New EasyDAItemSubscriptionArguments itemSubscriptionArguments2.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" itemSubscriptionArguments2.ItemDescriptor.itemId = "Trends.Ramp (1 min)" itemSubscriptionArguments2.GroupParameters.requestedUpdateRate = 1000 Dim itemSubscriptionArguments3 As New EasyDAItemSubscriptionArguments itemSubscriptionArguments3.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" itemSubscriptionArguments3.ItemDescriptor.itemId = "Trends.Sine (1 min)" itemSubscriptionArguments3.GroupParameters.requestedUpdateRate = 1000 ' Intentionally specifying an unknown item here, to demonstrate its behavior. Dim itemSubscriptionArguments4 As New EasyDAItemSubscriptionArguments itemSubscriptionArguments4.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" itemSubscriptionArguments4.ItemDescriptor.itemId = "Simulation.Register_I4" itemSubscriptionArguments4.GroupParameters.requestedUpdateRate = 1000 Dim arguments(3) As Variant Set arguments(0) = itemSubscriptionArguments1 Set arguments(1) = itemSubscriptionArguments2 Set arguments(2) = itemSubscriptionArguments3 Set arguments(3) = itemSubscriptionArguments4 ' Instantiate the client object Set Client2 = New EasyDAClient OutputText = OutputText & "Subscribing item changes..." & vbCrLf Dim handleArray() As Variant handleArray = Client2.SubscribeMultipleItems(arguments) OutputText = OutputText & "Processing item changed events for 1 minute..." & vbCrLf Pause 60000 OutputText = OutputText & "Unsubscribing..." & vbCrLf Client2.UnsubscribeAllItems OutputText = OutputText & "Waiting for 5 seconds..." & vbCrLf Pause 5000 OutputText = OutputText & "Finished." & vbCrLf Set Client2 = Nothing End Sub Public Sub Client2_ItemChanged(ByVal sender As Variant, ByVal eventArgs As EasyDAItemChangedEventArgs) If eventArgs.Succeeded Then OutputText = OutputText & eventArgs.arguments.ItemDescriptor.itemId & ": " & eventArgs.vtq & vbCrLf Else OutputText = OutputText & eventArgs.arguments.ItemDescriptor.itemId & " *** Failure: " & eventArgs.ErrorMessageBrief & vbCrLf End If End Sub
Rem This example shows how to subscribe to changes of multiple items and display the value of the item with each change. Option Explicit Dim ItemSubscriptionArguments1: Set ItemSubscriptionArguments1 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments") ItemSubscriptionArguments1.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemSubscriptionArguments1.ItemDescriptor.ItemID = "Simulation.Random" ItemSubscriptionArguments1.GroupParameters.RequestedUpdateRate = 1000 Dim ItemSubscriptionArguments2: Set ItemSubscriptionArguments2 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments") ItemSubscriptionArguments2.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemSubscriptionArguments2.ItemDescriptor.ItemID = "Trends.Ramp (1 min)" ItemSubscriptionArguments2.GroupParameters.RequestedUpdateRate = 1000 Dim ItemSubscriptionArguments3: Set ItemSubscriptionArguments3 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments") ItemSubscriptionArguments3.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemSubscriptionArguments3.ItemDescriptor.ItemID = "Trends.Sine (1 min)" ItemSubscriptionArguments3.GroupParameters.RequestedUpdateRate = 1000 Dim ItemSubscriptionArguments4: Set ItemSubscriptionArguments4 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments") ItemSubscriptionArguments4.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemSubscriptionArguments4.ItemDescriptor.ItemID = "Simulation.Register_I4" ItemSubscriptionArguments4.GroupParameters.RequestedUpdateRate = 1000 Dim arguments(3) Set arguments(0) = ItemSubscriptionArguments1 Set arguments(1) = ItemSubscriptionArguments2 Set arguments(2) = ItemSubscriptionArguments3 Set arguments(3) = ItemSubscriptionArguments4 Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient") WScript.ConnectObject Client, "Client_" Client.SubscribeMultipleItems arguments WScript.Echo "Processing item changed events for 1 minute..." WScript.Sleep 60*1000 Sub Client_ItemChanged(Sender, e) If Not (e.Succeeded) Then WScript.Echo "*** Failure: " & e.ErrorMessageBrief Exit Sub End If WScript.Echo e.Arguments.ItemDescriptor.ItemId & ": " & e.Vtq End Sub
Copyright © 2004-2023 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base. Technical support: Online Forums, FAQ.